package zw_301_400.zw_383_赎金信;

import java.util.HashMap;
import java.util.Map;

class Solution {

    public static void main(String[] args) {
        String ransomNote = "aa", magazine = "ab";
        boolean b = canConstruct(ransomNote, magazine);
        System.out.println(b);
    }

    /**
     * 哈希映射数组
     *
     * @param ransomNote
     * @param magazine
     * @return
     */
    public static boolean canConstruct(String ransomNote, String magazine) {
        int[] record = new int[26];
        for (char c : magazine.toCharArray()) {
            record[c - 'a'] += 1;
        }
        for (char c : ransomNote.toCharArray()) {
            record[c - 'a'] -= 1;
        }
        for (int i : record) {
            if (i < 0) return false;
        }
        return true;
    }



    /**
     * 标准哈希表
     *
     * @param ransomNote
     * @param magazine
     * @return
     */
//    public boolean canConstruct(String ransomNote, String magazine) {
//        char[] str1 = ransomNote.toCharArray();
//        char[] str2 = magazine.toCharArray();
//        Map<Character, Integer> map = new HashMap<Character, Integer>();
//        for (char z : str1) {//把ransomNote的值存进哈希表，如果存在相同，则value +1
//            if (map.containsKey(z)) {
//                map.put(z, map.get(z) + 1);
//            } else {
//                map.put(z, 1);
//            }
//        }
//        for (char z : str2) {//通过遍历magazine字符来抵消ransomNote字符
//            if (map.containsKey(z)) {
//                map.put(z, map.get(z) - 1);
//
//            }
//        }
//        for (char z : str1) {//因为ransomNote与哈希表key相似，所以通过ransomNote遍历hashmap
//            int index = map.get(z);
//            if (index > 0) {//如果index存在大于0的，说明magazine未能完全抵消ransomNote，即不能由他里面的字符构成
//                return false;
//            }
//        }
//        return true;
//    }
}
